package http

import (
	"gateway/core"
	"net/http/httputil"
	"net/url"
)

type ReverseProxy struct {
	target *url.URL
	proxy  *httputil.ReverseProxy
}

// 将请求代理到指定的目标服务器
func NewReverseProxy(target string) (*ReverseProxy, error) {
	u, err := url.Parse(target) //将字符串url 解析为 *url.URL
	if err != nil {
		return nil, err
	}
	return &ReverseProxy{
		target: u,
		proxy:  httputil.NewSingleHostReverseProxy(u), //go 标准库提供的反向代理实现
	}, nil
}

// Http 请求处理
func (p *ReverseProxy) Handle(ctx *core.Context) {
	p.proxy.ServeHTTP(ctx.Writer, ctx.Request)
}
